package com.amado.rmi.rmi;

import com.amado.rmi.rmi.service.RuleServiceImpl;
import com.amado.rmi.sevice.RuleService;
import com.amado.rmi.vo.Rule;

import java.net.MalformedURLException;
import java.rmi.AlreadyBoundException;
import java.rmi.Naming;
import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;

/**
 *
 * 服务端程序
 * 创建RMI注册表，启动RMI服务，并将远程对象注册到RMI注册表中。
 */
public class MainServer {
    public static void main(String []args) {
        try {
            //创建一个远程对象
            RuleService ruleService = new RuleServiceImpl();
            //远程主机远程对象注册表Registry的实例，并指定端口为8888，这一步必不可少（Java默认端口是1099），
            // 必不可缺的一步，缺少注册表创建，则无法绑定对象到远程注册表上
            LocateRegistry.createRegistry(8888);
            //把远程对象注册到RMI注册服务器上，并命名为RHello
            //绑定的URL标准格式为：rmi://host:port/name(其中协议名可以省略，下面两种写法都是正确的）
            Naming.bind("rmi://localhost:8888/ruleService",ruleService);
            //Naming.bind("//localhost:8888/RmiHello",rmiHello);
            //必须捕获这三个异常，否则需要在main方法中抛出
        }  catch (RemoteException e) {
            System.out.println("创建远程对象发生异常");
            e.printStackTrace();
        } catch (MalformedURLException e) {
            System.out.println("URL畸形异常");
            e.printStackTrace();
        } catch (AlreadyBoundException e) {
            System.out.println("重复绑定对象异常");
            e.printStackTrace();
        }
        System.out.println("服务启动成功....");
    }
}